package com.vecspace.dayu.code.ui.service;

import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;

import com.vecspace.dayu.code.pojo.DataColumn;
import com.vecspace.dayu.code.ui.dao.DataGridColumnDao;
import com.vecspace.dayu.code.ui.pojo.DataGridColumn;
import com.vecspace.exception.HException;
import com.vecspace.utils.AnnoUtil;
import com.vecspace.utils.Assert;
import com.vecspace.utils.NumberUtil;

/**功能描述 DAYU-页面数据表格列的增、删、改查等业务操作的service类
 * @author wanghua
 */
@Service("dayu_dataGridColumnService")
public class DataGridColumnService {
	/** 根据ID查询 DAYU-页面数据表格列 
	 * @param id   主键值
	 * @return DataGridColumn
	 * @throws Exception
	 * @author wanghua
	 */
	public DataGridColumn getDataGridColumn(Long id) throws Exception{
		return dataGridColumnDao.getDataGridColumn(id);
	}
	
	/**根据表格id或者表格的所有字段
	 * 
	 * @param datagridId
	 * @return
	 * @throws Exception 
	 * @author wanghua
	 */
	public List<DataGridColumn> getDataGridColumns(Long datagridId) throws Exception {
		return dataGridColumnDao.getDataGridColumns(datagridId);
	}
	
	/***将页面上传入的对象转为持久化对象（如果页面对象是一个新对象，则insert;否则从数据库库查询出已有的对象item2，将传入的值赋值给item2，然后将item2 update到数据库）
	 * 根据页面上放置的属性个数，需要对下面的属性设置进行调整。
	 * 对于无法在页面上进行修改的属性，不要进行设值。
	 * @param item item是由页面传递过来的对象，item中的属性并不完整，对于在页面上没有展示的属性，item中一律会是空值，而数据库中这些属性可以是有值的
	 * @return DataGridColumn
	 * @throws Exception
	 * @author wanghua
	 */
	public DataGridColumn saveViewDataGridColumn(DataGridColumn item, String loginId) throws Exception {
		if (item == null){
			return null;
		}
		/*** 下面开始对item对象的页面传值进行校验，如必填项，格式等 ***/
		//Assert.throwz(StringUtils.isNotBlank() , "条件不满足时抛出异常");
		/*** 结束校验 ***/
		
		DataGridColumn item2;
		if (NumberUtil.isNotNullZero(item.getId())) {
			/**从数据库中取出原始对象，将从页面传过来的新值赋值给原始对象，并将原始对象再保存到数据库中 **/
			item2 = getDataGridColumn(item.getId());
			if (item2 != null) {
				/*** 将页面上的新值逐一赋值，不在页面上的属性不要进行赋值 ***/
				//item2.setDatagridId(item.getDatagridId());//更新表格ID
				item2.setColumnId(item.getColumnId());//更新字段ID
				item2.setColumnLabel(item.getColumnLabel());//更新表头
				item2.setColumnGroup(item.getColumnGroup());//更新表头分组
				item2.setColumnWidth(item.getColumnWidth());//更新列宽
				item2.setCellTextType(item.getCellTextType());//更新显示样式
				item2.setFontStyle(item.getFontStyle());//更新字体
				item2.setHyperlink(item.getHyperlink());//更新超链接
				item2.setRenderScript(item.getRenderScript());//更新自定义显示内容
				item2.setVisibleStatus(item.getVisibleStatus());//更新显示状态
				item2.setFixed(item.getFixed());//更新是否固定列
				item2.setMergeCell(item.getMergeCell());//更新合并单元格
				item2.setEditAble(item.getEditAble());//更新可编辑
				item2.setInputElementType(item.getInputElementType());//更新编辑输入框类型
				item2.setEditMenu(item.getEditMenu());//更新下拉菜单	
				item2.setAggregateFunc(item.getAggregateFunc());
				item2.setAggregateGroup(item.getAggregateGroup());
				item2.setQueryField(item.getQueryField());
				item2.setQuerySqlOperator(item.getQuerySqlOperator());
				item2.setQueryVisibleStatus(item.getQueryVisibleStatus());
				item2.setQueryInputElementType(item.getQueryInputElementType());
				item2.setQueryRequired(item.getQueryRequired());				
				item2.setQueryMultiValue(item.getQueryMultiValue());//多选
				item2.setOrdnum(item.getOrdnum());//更新顺序号

				/**end**/
			} else {
				item2 = item;
			}
		}else{ //item是新增加的对象
			item2 = item;
		}
		saveDataGridColumn(item2, loginId);
		return item2;
	}
	
	/** 插入或修改 DAYU-页面数据表格列 ，item中的所有属性都会更新到数据库中（包括属性值为null的，也会将null更新到数据库，覆盖之前的值）。
	 * @param item	要保存的对象
	 * @return void
	 * @throws Exception
	 * @author wanghua
	 */
	public void saveDataGridColumn(DataGridColumn item, String loginId) throws Exception{
		if (item == null){
			return;
		}
		/*** 下面开始对item对象进行校验，如逻辑关系等 ***/
		Assert.throwz(NumberUtil.isNotNullZero(item.getDatagridId()), "datagridId不能为空");
		/*** 结束校验 ***/
		Date date = new Date();
		if (NumberUtil.isNullOrZero(item.getId())) {

			item.setId(null);
			item.setCreateTime(date);
			item.setCreateUser(loginId);//更新记录创建人ID

		} else {

		}
		dataGridColumnDao.saveDataGridColumn(item);
	}
	/**更新单个字段的值
	 * 
	 * @param id
	 * @param propName
	 * @param value
	 * @return
	 * @throws Exception 
	 * @author wanghua
	 */
	public void updateProp(Long id, String propName, Object value) throws Exception {
		String columnName = null;		
			columnName = AnnoUtil.getColumnNameByPropName(DataColumn.class, propName);
		
		if(columnName != null) {
			dataGridColumnDao.updateValue(id, columnName, value);
		}else throw new HException("不能识别的属性名：" + propName);
	}
	
	/** 根据ID删除 DAYU-页面数据表格列 
	 * @param id	主键值
	 * @return void
	 * @throws Exception
	 * @author wanghua
	 */
	public void deleteDataGridColumn(Long id) throws Exception{		
		dataGridColumnDao.deleteDataGridColumn(id);
	}
	
	/** property **/
	@Autowired
	private DataGridColumnDao dataGridColumnDao;
}
